// 2025.09.16 21:52:52 星期二 晴 无事
// 2025.09.17 01:42:42 星期三 复制 项
// 这个是 移出 元素 的 动画

import { settimeNth } from '../../../../global/Func/settimeNth';
import { set_static_css } from '../../Css/Func/set_static_css';
import { inject_remove_duration } from '../../DataDefine/sourceData';
import { disappearElFunc } from '../disappear_dom';
import { endsTimeAnimation } from '../endsTimeAnimation';
import { remove_dom_operate } from './Classes/cla_remove_dom_operate';
import { spacename_remove_dom } from './DataDefine/sourceData';

// 动画 过程 先 将元素 初始
// 应用 appear_dom
// left : 100%
// opacity : 0

// 过度 元素 初始位置
/**
 * 移出 元素 动画
 *
 * 元素 从当前位置 右移
 *
 * 元素 缩小至 消失
 */
export async function remove_dom_func_promise(elt: HTMLElement) {
  let p = new Promise<void>((res) => {
    // 创建 对应消失 方向的 生成 集
    let appearObj = new remove_dom_operate(elt);

    // 装在元素 id
    let spical_id = `${spacename_remove_dom}_${elt.id}`;

    // 装载 当前 元素的 特定 类 css 信息
    set_static_css(spical_id, appearObj.setstaticCss());

    let { remove_dom_anima_cla } = appearObj;

    let delay = endsTimeAnimation(elt, remove_dom_anima_cla);

    //   在 元素 结束 动画后 执行 回调函数
    settimeNth(delay, () => {
      res();
    });
  });

  let promise_arr = [p, remove_only_child_appear(elt)];

  return Promise.all(promise_arr);
}

async function remove_only_child_appear(elt: HTMLElement) {
  let promise_arr: Promise<void>[] = [];

  for (const cur_chi of elt.children) {
    let p = new Promise<void>((res) => {
      disappearElFunc(cur_chi as any, 'both', res, inject_remove_duration);
    });

    promise_arr.push(p);

    remove_only_child_appear(cur_chi as any);
  }

  return Promise.all(promise_arr);
}
